package sohsite.fachada;

import java.util.Collection;

import org.hibernate.Transaction;

import sohsite.excecao.EntradaInexistenteException;
import sohsite.excecao.ParametroInvalidoException;
import sohsite.usuario.CadastroUsuario;
import sohsite.usuario.IRepositorioUsuario;
import sohsite.usuario.Usuario;
import sohsite.util.generico.ControladorGenerico;

public class ControladorUsuario extends ControladorGenerico{
	private CadastroUsuario cadastroUsuario;
	
	public ControladorUsuario(IRepositorioUsuario repositorioUsuario){
		super();
		this.cadastroUsuario = new CadastroUsuario(repositorioUsuario);
	}
	
	public void inserirUsuario(Usuario usuario){
		Transaction transacao = iniciarTransacao();
		try {
			this.cadastroUsuario.inserir(usuario);			
		} catch (ParametroInvalidoException e) {
			e.printStackTrace();
		}
		transacao.commit();
	}
	
	public void atualizarUsuario(Usuario usuario){
		Transaction transacao = iniciarTransacao();
		try {
			this.cadastroUsuario.atualizar(usuario);			
		} catch (ParametroInvalidoException e) {
			e.printStackTrace();
		}
		transacao.commit();
	}
	
	public void deletarUsuario(Usuario usuario){
		Transaction transacao = iniciarTransacao();
		try {
			this.cadastroUsuario.deletar(usuario);			
		} catch (ParametroInvalidoException e) {
			e.printStackTrace();
		}
		transacao.commit();
	}
	
	public void deletarUsuario(int idUsuario) throws EntradaInexistenteException{
		Transaction transacao = iniciarTransacao();
		try {
			this.cadastroUsuario.deletar(idUsuario);			
		} catch (ParametroInvalidoException e) {
			e.printStackTrace();
		}
		transacao.commit();
	}
	
	public Usuario consultarUsuario(int id) throws EntradaInexistenteException{
		Transaction transacao = iniciarTransacao();	
		Usuario usuario = null;
		try {
			usuario = this.cadastroUsuario.consultar(id);
		} catch (ParametroInvalidoException e) {
			e.printStackTrace();
		}			
		transacao.commit();
		
		return usuario;
	}
	
	public Collection<Usuario> consultarTodosUsuarios() throws EntradaInexistenteException{
		Transaction transacao = iniciarTransacao();	
		Collection<Usuario> usuarios = null;
		
		usuarios = this.cadastroUsuario.consultarTodos();
		
		transacao.commit();
		
		return usuarios;
	}
	
	public Collection<Usuario> consultarUsuarios(String nome, String cpf) throws EntradaInexistenteException{
		Transaction transacao = iniciarTransacao();	
		Collection<Usuario> usuarios = null;
		
		usuarios = this.cadastroUsuario.consultarUsuarios(nome, cpf);
		
		transacao.commit();
		
		return usuarios;
	}
	public Usuario consultarUsuarioPorLogin(String login) throws EntradaInexistenteException{
		Transaction transacao = iniciarTransacao();	
		Usuario usuario = null;
		
		try{
			usuario = this.cadastroUsuario.consultarUsuarioPorLogin(login);
		} catch (ParametroInvalidoException e) {
			e.printStackTrace();
		}	
		transacao.commit();
		
		return usuario;
	}	
	
}
